package net.sudot.commons.pagination;


import net.sudot.commons.utils.ResponseMessage;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 分页工具
 *
 * @author 唐家林
 * @time 2016年3月30日
 */
public class PageUtills {

    public enum PageType {
        EASY_UI,
        DATA_TABLES
    }

    /**
     * 封装分页数据
     *
     * @return 返回分页封装后的数据
     */
    public static <E> Page<E> newPageInstance() {
        return new Page<E>();
    }

    /**
     * 获取对应表格分页响应数据
     *
     * @param page     分页数据
     * @param pageType 响应数据格式
     * @return 分页响应数据
     */
    public static ResponseMessage getResponseMessage(Page<?> page, PageType pageType) {
        Map<String, Object> pageResponse = pageType == PageType.EASY_UI ? getEasyUIPageResponse(page) : getDataTablesPageResponse(page);
        return new ResponseMessage(true).setData(pageResponse);
    }

    /**
     * 获取对应表格分页响应数据
     *
     * @param page     分页数据
     * @param pageType 响应数据格式
     * @return 分页响应数据
     */
    public static String getStringResponse(Page<?> page, PageType pageType) {
        return getResponseMessage(page, pageType).toString();
    }

    /**
     * 获取EasyUI表格分页响应数据
     *
     * @param page 分页数据
     * @return 分页响应数据
     */
    public static <E> Map<String, Object> getEasyUIPageResponse(Page<E> page) {
        page = page == null ? PageUtills.<E>newPageInstance() : page;

        List<E> records = page.getRecords();
        records = records == null ? new ArrayList<E>(0) : records;

        List<E> footerRecords = page.getFooterRecords();
        footerRecords = footerRecords == null ? new ArrayList<E>(0) : footerRecords;

        Map<String, Object> pageWrapper = new HashMap<String, Object>();
        pageWrapper.put("total", page.getTotal());
        pageWrapper.put("rows", records);
        pageWrapper.put("footer", footerRecords);
        return pageWrapper;
    }

    /**
     * 获取DataTables表格的分页响应数据
     *
     * @param page 分页数据
     * @return 分页响应数据
     */
    public static <E> Map<String, Object> getDataTablesPageResponse(Page<E> page) {
        page = page == null ? PageUtills.<E>newPageInstance() : page;

        List<E> records = page.getRecords();
        records = records == null ? new ArrayList<E>(0) : records;

//		List<E> footerRecords = page.getFooterRecords();
//		footerRecords = footerRecords == null ? new ArrayList<E>(0) : footerRecords;

        Map<String, Object> pageWrapper = new HashMap<String, Object>();
        pageWrapper.put("recordsTotal", page.getTotal());
        pageWrapper.put("recordsFiltered", page.getTotal());
        pageWrapper.put("data", records);
        return pageWrapper;
    }
}
